package cdc.retrofit.demo;
import java.util.List;
import java.util.Map;

import cdc.tools.FileResult;
import cdc.tools.Person;
import cdc.tools.User;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
public interface Api {
	
	@GET("users")
	Call<List<User>> listUsers();
	
	@Headers("Cache-Control: max-age=640000")
	@GET("user/{id}")
	Call<User> userid(@Path("id") Integer id);
	
	@GET("person/{id}")
	Call<Person> personid(@Path("id") Integer id);
	
	@GET("{id}/user")
	Call<User> iduser(@Path("id") Integer id);
	
	@GET("user")
	Call<User> user(@Query("id") Integer id);
	
	@GET("userBoth")
	Call<User> userboth(@Query("id") Integer id,@Query("name")String name);
	
	@GET("userBoth")
	@POST("userBoth")
	Call<User> userbothMap(@QueryMap Map<String, Object> options);
	
	/**
	 * 以表单的方式上传  两个参数
	 * @param id
	 * @param name
	 * @return
	 */
	@FormUrlEncoded
	@POST("userBoth")
	Call<User> userbothForm(@Field("id") Integer id, @Field("name") String name);
	
	/**
	 * 上传json数据，并返回json数据
	 * @param user
	 * @return
	 */
	@Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头  
	@POST("upUser")
	Call<User> createUser(@Body RequestBody  user);
	
	/**
	 * 上传一个文件 和两个参数
	 * @param file  用@Part MultipartBody.Part 注解来定义我们要上传的图片文件
	 * @param id    用@Part("attribute") RequestBody 直接来定义请求中的字符串字段
	 * @param name  用@Part("attribute") RequestBody 直接来定义请求中的字符串字段
	 * @return
	 */
	@Multipart
	@POST("uploadUser")
	Call<FileResult> updateUser(@Part MultipartBody.Part  file, @Part("id")   RequestBody id, @Part("name")   RequestBody name);
	
	/**
	 * 上传一个文件 和两个参数
	 * @param RequestBody fileParamers
	 * @return
	 */
	@POST("uploadUser")
	Call<FileResult> updateUser2(@Body RequestBody  fileParamers);
	
	
	/**
	 * 上传多个文件 和两个参数
	 * @param fileParamers
	 * @return
	 */
	@POST("uploadsUser")
	Call<FileResult> updateUser3(@Body RequestBody  fileParamers);
	
	
	/**
	 * 上传json数据，并返回json数据
	 * @param person
	 * @return
	 */
	@Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头  
	@POST("upPerson")
	Call<Person> createPerson(@Body RequestBody  person);
	
	
	
	
	
	

}
